package com.bjpowernode.ba01;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * Aspect 来自AspectJ框架
 * 位置：类的上面
 * 作用：表示当前类是切面类，用来增加功能的
 *
 */
@Component
@Aspect
public class MyAspect {
	//自定义方法，增加功能
	
	/**
	 * @Before:前置通知
	 *   value:切入点表达式， 指定位置
	 * 特点：
	 *  1.在目标方法之前执行的。
	 *  2.不会影响目标方法的执行，也不能改变目标方法的执行结果。
	 */
	@Before(value="execution(* com.bjpowernode.ba01.SomeServiceImpl.doSome())")
	public void myBefore(){
		//功能增强的代码
		System.out.println("前置通知：在目标方法之前先执行的代码");
	}
	
	//通知方法可以加入参数JoinPoint ， 表示切入点的信息
	@Before(value="execution(* com.bjpowernode.ba01.SomeServiceImpl.doSome())")
	public void myBefore(JoinPoint jp){
		//获取方法的签名（方法的定义）
		System.out.println("方法的定义："+jp.getSignature());
		//获取切入点方法的参数列表
		Object args [] = jp.getArgs();
		System.out.println("doSome()参数的个数："+args.length);
		
		//功能增强的代码
		System.out.println("前置通知：在目标方法之前先执行的代码");
	}
}
